package tests;

import modelo.Coordenada;
import modelo.AlgoTank;
import modelo.Juego;
import modelo.Laberinto;
import modelo.Enemigos;
import modelo.Mirage;
import junit.framework.TestCase;

public class TanquesEnemigosTest extends TestCase {

	private Enemigos tanqueEnemigo;	
	private Coordenada posicionInicialTanqueEnemigo;
	private Coordenada posicionInicialAlgoTank;
	private Laberinto elLaberinto;
	private Juego elJuego;
	private AlgoTank algoTank;
	
	protected void setUp() throws Exception {
		super.setUp();	
		elJuego = new Juego("original.lab");
		posicionInicialAlgoTank = new Coordenada(2 , 15);
		posicionInicialTanqueEnemigo = new Coordenada( 5 , 15);
		elLaberinto = new Laberinto(elJuego , "original.lab");		
		algoTank = new AlgoTank(posicionInicialAlgoTank, elLaberinto , elJuego);
		tanqueEnemigo = new Mirage (posicionInicialTanqueEnemigo , elLaberinto , elJuego, algoTank);	
	}
	
	/* TestAcercarse
	 * Mediante este test, se pretende medir la posicion inicial del TanqueEnemigo 
	 * para luego al utilizar el metodo 
	 *           void acercarse()
	 * la distancia final sea menor que la distancia inicial con respecto al fantasma
	 */
	public void testAcercarse(){	
		// el metodo getX y getY se heredan de la clase Personaje
		tanqueEnemigo.vivir();

		double distanciaAlgoTank =  Math.sqrt( algoTank.getX() * algoTank.getX() + algoTank.getY() * algoTank.getY());
		double distancia_inicial_Enemigo = Math.sqrt( tanqueEnemigo.getX() * tanqueEnemigo.getX() + tanqueEnemigo.getY() * tanqueEnemigo.getY());
		
		// Distancia inicial con respecto al AlgoTank
		distancia_inicial_Enemigo = distanciaAlgoTank - distancia_inicial_Enemigo;
		
		tanqueEnemigo.moverse(new Coordenada(1,1));
		
		for(int i=0; i<10; i++)
			tanqueEnemigo.vivir();
		
		double distancia_final_tanqueEnemigo = Math.sqrt( tanqueEnemigo.getX() * tanqueEnemigo.getX() + tanqueEnemigo.getY() * tanqueEnemigo.getY());
		// Distancia final con respecto al AlgoTank
		distancia_final_tanqueEnemigo = distanciaAlgoTank - distancia_final_tanqueEnemigo;
		// Evaluo ambas distancias
		assertTrue ( Math.abs(distancia_inicial_Enemigo) != Math.abs(distancia_final_tanqueEnemigo));
	}
	
}
